//package com.github.pig.admin.listener;
//
//import com.github.pig.admin.model.dto.RoleDTO;
//import com.github.pig.admin.model.dto.UserDTO;
//import com.github.pig.admin.service.sys.SysUserService;
//import com.github.pig.common.util.R;
//import org.activiti.engine.IdentityService;
//import org.activiti.engine.identity.Group;
//import org.activiti.engine.identity.User;
//import org.activiti.engine.impl.persistence.entity.GroupEntity;
//import org.activiti.engine.impl.persistence.entity.UserEntity;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
///**
// *
// * 切入实现系统用户 角色 用户-角色 同步到 activiti 用户 组 用户组 同步到工作流,模块化 无侵入
// * @author zhaolulu
// */
//@Aspect
//@Component
//public class ListenUserRole {
//
//  @Autowired
//  IdentityService identityService;
//
//  @Autowired
//  SysUserService userService;
//
//
//  /**********************用户处理begin***************************/
//  /**
//   * 明确切入方法的参数
//   * @param joinPoint
//   */
//  @Around("execution(com.github.pig.common.util.R com.github.pig.admin.controller.UserController.userUpdate(..))")
//  public Object listenerUserUpdate(ProceedingJoinPoint joinPoint){
//    Object o=new Object();
//    try{
//      //更新前拿到用户-角色数据
//      Object[] args = joinPoint.getArgs();
//      o = joinPoint.proceed(joinPoint.getArgs());
//      R result= (R) o;
//      if((Boolean) result.getData()){
//        changeUser(args);
//      }
//    }catch (Throwable  e){
//      e.printStackTrace();
//    }
//    return o;
//  }
//
//  /**
//   * 新增用户监听 同步工作流用户表 环绕注解能得到 插入用户id 啊哈哈
//   * @param joinPoint
//   */
//  @Around("execution(com.github.pig.common.util.R com.github.pig.admin.controller.UserController.user(..))")
//  public Object  listenerUserInsert(ProceedingJoinPoint joinPoint){
//    Object o=new Object();
//    try{
//      o = joinPoint.proceed(joinPoint.getArgs());
//      Object[] args = joinPoint.getArgs();
//      R result= (R) o;
//      if((Boolean) result.getData()){
//         changeUser(args);
//      }
//
//    }catch (Throwable  e){
//      e.printStackTrace();
//    }
//    return o;
//  }
//
//  @Around("execution(com.github.pig.common.util.R com.github.pig.admin.controller.UserController.userDel(..))")
//  public Object listenDelUser(ProceedingJoinPoint point){
//    Object o=new Object();
//    try{
//      o = point.proceed(point.getArgs());
//      R result= (R) o;
//      if((Boolean) result.getData()){
//        Object[] args = point.getArgs();
//        identityService.deleteUser((String) args[0]);
//      }
//
//    }catch (Throwable  e){
//      e.printStackTrace();
//    }
//    return o;
//  }
//
//
//  /**
//   * 保存进 activiti 用户 角色 用户角色中间表
//   * @param obj
//   */
//  private void changeUser(Object[] obj){
//    UserDTO user= (UserDTO) obj[0];
//    identityService.deleteUser(user.getUserId()+"");
//    User au =new UserEntity();
//    au.setId(user.getUserId()+"");
//    au.setFirstName(user.getUsername());
//    identityService.saveUser(au);
//
//    //删除用户-组关联
//    for(Integer roleId:user.getRole()){
//      identityService.deleteMembership(user.getUserId()+"",roleId+"");
//    }
//    //再次关联
//    if(user.getRole()!=null){
//      for(Integer roleId:user.getRole()){
//        identityService.createMembership(user.getUserId()+"",roleId+"");
//      }
//    }
//  }
//
//  /**********************用户处理end***************************/
//
//
//
//  /**********************角色处理begin***************************/
//  @Around("execution(com.github.pig.common.util.R com.github.pig.admin.controller.RoleController.role(..))")
//  public Object listenRoleInsert(ProceedingJoinPoint joinPoint){
//    Object o=null;
//    try{
//      o=joinPoint.proceed(joinPoint.getArgs());
//      R result= (R) o;
//      if((Boolean) result.getData()){
//        Object[] args = joinPoint.getArgs();
//        changeRole(args);
//      }
//    }catch (Throwable throwable){
//
//    }
//    return o;
//  }
//
//  @Around("execution(com.github.pig.common.util.R com.github.pig.admin.controller.RoleController.roleUpdate(..))")
//  public Object listenRoleUpdate(ProceedingJoinPoint joinPoint){
//    Object o=null;
//    try{
//      o=joinPoint.proceed(joinPoint.getArgs());
//      Object[] args = joinPoint.getArgs();
//      R result= (R) o;
//      if((Boolean) result.getData()){
//       changeRole(args);
//      }
//    }catch (Throwable throwable){
//
//    }
//    return o;
//  }
//
//  @Around("execution(com.github.pig.common.util.R com.github.pig.admin.controller.RoleController.roleDel(..))")
//  public Object listenDelRole(ProceedingJoinPoint point){
//    Object o=new Object();
//    try{
//      o = point.proceed(point.getArgs());
//      R result= (R) o;
//      if((Boolean) result.getData()){
//        Object[] args = point.getArgs();
//        identityService.deleteGroup((String) args[0]);
//      }
//    }catch (Throwable  e){
//      e.printStackTrace();
//    }
//    return o;
//  }
//
//  /**
//   * 更新进组
//   * @param obj
//   */
//  public void changeRole(Object[] obj){
//    RoleDTO role = (RoleDTO) obj[0];
//    identityService.deleteGroup(role.getRoleId()+"");
//    Group group=new GroupEntity();
//    group.setId(role.getRoleId()+"");
//    group.setName(role.getRoleName());
//    identityService.saveGroup(group);
//  }
//
//  /**********************角色处理end***************************/
//}
